import pygame
from pygame.locals import *
import time
import random
#监听键盘的函数
def key_control(heroPlane_temp):
    for event in pygame.event.get():
        #判断是否点击了退出按钮
        if event.type==QUIT:
            print("哈哈，我去退出了")
            exit()
        #判断是否是按下了键盘
        elif event.type==KEYDOWN:
            if event.key==K_d or event.key==K_RIGHT:
                #飞机向右移动
                heroPlane_temp.move_right()
            elif event.key==K_a or event.key==K_LEFT:
                #点击了左键
                heroPlane_temp.move_left()
            elif event.key==K_SPACE:
                #点击空格键盘开火
                heroPlane_temp.fire()

#定义一个超类
class Base(object):
    def __init__(self,screen_temp,x,y,image_name):
        self.screen=screen_temp
        self.x=x
        self.y=y
        self.image=pygame.image.load(image_name)
#定义一个战机基类
class BasePlane(Base):
    def __init__(self,screen_temp,x,y,image_name):
        Base.__init__(self,screen_temp,x,y,image_name)
        #存储发射的子弹对象
        self.bullet_list=[]
    #战机显示方法
    def display(self):
        self.screen.blit(self.image,(self.x,self.y))
        #显示子弹
        for bullet in self.bullet_list:
            bullet.display()
            bullet.move()
            if bullet.judge():
                self.bullet_list.remove(bullet)
#定义一个敌方战机
class EnemyPlane(BasePlane):
    def __init__(self,screen_temp):
        BasePlane.__init__(self,screen_temp,0,0,"./feiji/enemy0.png")
        self.direction="right"
    #敌机来回移动
    def move(self):
        if self.direction=="right":
            self.x+=2
        elif self.direction=="left":
            self.x-=2
        if(self.x>400-50):
            self.direction="left"
        elif self.x<0:
            self.direction="right"
    #敌机开火
    def fire(self):
        random_num=random.randint(1,100)
        if random_num==8 or random_num==20:
            self.bullet_list.append(EnemyBullet(self.screen,self.x,self.y))

#定义一个英雄战机
class HeroPlane(BasePlane):
    def __init__(self,screen_temp):
        #飞机大小：100*124
        BasePlane.__init__(self,screen_temp,150,550,"./feiji/hero1.png")
    #飞机向右移动
    def move_right(self):
        self.x+=5
    # 飞机向左移动
    def move_left(self):
        self.x -= 5
    #开火
    def fire(self):
        self.bullet_list.append(HeroBullet(self.screen,self.x,self.y))
        pass
#定义一个子弹超类
class BaseBullet(Base):
    #定义显示
    def display(self):
        self.screen.blit(self.image,(self.x,self.y))
#定义一个敌方子弹
class EnemyBullet(BaseBullet):
    def __init__(self,screen_temp,x,y):
        BaseBullet.__init__(self,screen,x+25,y+40,"./feiji/bullet1.png")
    #敌方子弹移动
    def move(self):
        self.y+=5
    #敌方子弹判断是否过界
    def judge(self):
        if self.y>700:
            return True
        else:
            return False
#定义一个友方子弹
class HeroBullet(BaseBullet):
    def __init__(self,screen_temp,x,y):
        BaseBullet.__init__(self,screen_temp,x+40,y-20,"./feiji/bullet.png")
    #子弹移动
    def move(self):
        self.y-=4
    #判断子弹是否越过边界
    def judge(self):
        if self.y<0 :
            return True
        else:
            return False
if __name__=="__main__":
    # 创建一个窗口，用来显示
    screen=pygame.display.set_mode((400,700),0,32)
    #创建一个背景
    background=pygame.image.load("./feiji/background.png").convert()
    #实例化一个英雄战机
    heroPlane=HeroPlane(screen)
    #实例化一个敌机
    enemyPlane=EnemyPlane(screen)
    while True:
        screen.blit(background,(0,0))
        #监听按键
        key_control(heroPlane)
        #显示英雄战机
        heroPlane.display()
        #显示敌机
        enemyPlane.display()
        #敌机移动
        enemyPlane.move()

        #敌机开火
        enemyPlane.fire()
        #更新试图，记住要放在底部
        pygame.display.update()
        #防止咋用内存过高
        time.sleep(0.01)








